import { request } from "./axios";

/**
 * 任务状态常量
 */
export enum TaskStatus {
  PENDING = 0,    // 等待处理
  PROCESSING = 1, // 处理中
  COMPLETED = 2,  // 已完成
  FAILED = 3      // 失败
}

/**
 * 任务类型常量
 */

export enum TaskType {
  NORMAL = 0,  // 普通模式
  AI = 1       // AI模式
}

/**
 * 基础任务接口，定义了任务相关的共同字段
 */
export interface BaseTask {
  taskId?: number;               // 任务ID
  taskPrompt?: string;           // 任务提示词
  taskType?: TaskType;           // 任务类型
  taskStatus?: TaskStatus;       // 任务状态
  taskCategory?: string;         // 任务分类
  taskGenQty?: number;           // 生成数量
  taskSwitchNum?: number;        // 切换数量
  imgSize?: string;              // 图片尺寸
  isDeleted?: number;            // 是否删除 (0: 未删除, 1: 已删除)
  // 扩展属性
  attritube1?: string;           // 扩展属性1
  attritube2?: string;           // 扩展属性2
  attritube3?: string;           // 扩展属性3
  attritube4?: string;           // 扩展属性4
  attritube5?: string;           // 扩展属性5
}

/**
 * 任务响应接口，包含服务器返回的额外字段
 */
export interface TaskResponse extends BaseTask {
  creationDate: Record<string, unknown>;    // 创建时间
  lastModifiedDate: Record<string, unknown>; // 最后修改时间
}

/**
 * 创建任务参数接口
 */
export interface CreateTaskParams extends BaseTask {
  insertPoints?: Record<string, unknown>;   // 插入点
}

/**
 * 创建任务响应接口
 */
export interface CreateTaskRes {
  taskId?: number;  // 可能返回任务ID
  success?: boolean; // 是否成功
  message?: string;  // 消息
}

/**
 * 获取所有任务的响应
 */
export type GetAllTasksRes = TaskResponse[];

/**
 * 获取按分类的任务响应
 */
export type GetTasksByCategoryRes = TaskResponse[];

/**
 * 单个任务详情响应
 */
export type GetTaskRes = TaskResponse;

/**
 * 更新任务参数接口
 */
export type UpdateTaskParams = Partial<BaseTask>;

/**
 * 更新任务响应接口
 */
export interface UpdateTaskRes {
  success?: boolean; // 是否成功
  message?: string;  // 消息
}

/**
 * 删除任务响应接口
 */
export interface DeleteTaskRes {
  success?: boolean; // 是否成功
  message?: string;  // 消息
}

/**
 * 图片生成参数接口
 */
export interface GenerateImageParams {
  type: TaskType;             // 生成类型 (0: 普通模式, 1: AI模式)
  prompt: string;             // 提示词
  strength?: number;          // 强度 (0-100)
  image?: string;             // 原始图片 (base64)
  keywords?: Record<string, string>; // 关键词 (格式: {k1: "keyword1", k2: "keyword2^keyword3"})
}

/**
 * 图片生成响应接口
 */
export interface GenerateImageRes {
  images: Array<{ url: string; prompt: string }>; // 生成的图片列表
  success: boolean; // 是否成功
  message?: string; // 消息
}

/** 
 * 获取所有任务列表
 * @returns 任务列表
 */
export function getAllTasks(): Promise<GetAllTasksRes> {
  return request.get('/api/tasks');
}

/** 
 * 创建新任务
 * @param {CreateTaskParams} params - 创建任务的参数
 * @returns 创建结果
 */
export function createTask(params: CreateTaskParams): Promise<CreateTaskRes> {
  return request.post('/api/tasks', params);
}

/** 
 * 按分类获取任务列表
 * @param {string} category - 任务分类
 * @returns 任务列表
 */
export function getTasksByCategory(category: string): Promise<GetTasksByCategoryRes> {
  return request.get(`/api/tasks/category/${category}`);
}

/** 
 * 获取单个任务详情
 * @param {number} taskId - 任务ID
 * @returns 任务详情
 */
export function getTask(taskId: number): Promise<GetTaskRes> {
  return request.get(`/api/tasks/${taskId}`);
}

/** 
 * 更新任务
 * @param {number} taskId - 任务ID
 * @param {UpdateTaskParams} params - 更新参数
 * @returns 更新结果
   */
  export function updateTask(taskId: number, params: UpdateTaskParams): Promise<UpdateTaskRes> {
  return request.put(`/api/tasks/${taskId}`, params);
}

/** 
 * 删除任务
 * @param {number} taskId - 任务ID
 * @returns 删除结果
 */
export function deleteTask(taskId: number): Promise<DeleteTaskRes> {
  return request.delete(`/api/tasks/${taskId}`);
}

/**
 * 生成提示词和图片
 * @param {CreateTaskParams} params - 提交任务的参数
 * @returns 提交结果
 */
export function submitDescribe(payload: { base64: string }): Promise<CreateTaskRes> {
  return request.post('/submit/describe', payload);
}

/**
 * 生成图片
 * @param {GenerateImageParams} params - 生成图片的参数
 * @returns 生成结果
 */
export function generateImages(params: GenerateImageParams): Promise<GenerateImageRes> {
  return request.post('/api/generate', params);
}